Add simple repo roundtrip test
authorFelix Krull <f_krull@gmx.de>
Tue, 9 Oct 2018 20:02:48 +0000 (22:02 +0200)
committerColin Walters <walters@verbum.org>
Fri, 6 May 2022 16:53:53 +0000 (12:53 -0400)
rust-bindings/rust/libostree/Cargo.toml
rust-bindings/rust/libostree/tests/roundtrip.rs [new file with mode: 0644]

index af71b7771b44d4845596148e60ef9d302c8e7a6d..3c1a628c05583d4ca194a75b2716260ae2b6dd78 100644 (file)
@@ -6,12 +6,15 @@ version = "0.2.0"
 name = "libostree"
 
 [dependencies]
-libc = "^0.2.0"
-bitflags = "^1.0.0"
-lazy_static = "1.1.0"
-glib = "^0.6.0"
-gio = "^0.5.0"
-glib-sys = "^0.7"
-gobject-sys = "^0.7"
-gio-sys = "^0.7"
+libc = "0.2"
+bitflags = "1"
+lazy_static = "1.1"
+glib = "0.6"
+gio = "0.5"
+glib-sys = "0.7"
+gobject-sys = "0.7"
+gio-sys = "0.7"
 libostree-sys = { path = "../libostree-sys" }
+
+[dev-dependencies]
+tempfile = "3"
diff --git a/rust-bindings/rust/libostree/tests/roundtrip.rs b/rust-bindings/rust/libostree/tests/roundtrip.rs
new file mode 100644 (file)
index 0000000..35dbfa3
--- /dev/null
@@ -0,0 +1,63 @@
+extern crate gio;
+extern crate glib;
+extern crate libostree;
+extern crate tempfile;
+
+use std::fs;
+use std::io;
+use std::io::Write;
+use glib::prelude::*;
+use libostree::prelude::*;
+
+
+
+fn create_repo(repodir: &tempfile::TempDir) -> Result<libostree::Repo, glib::Error> {
+    let repo = libostree::Repo::new_for_path(repodir.path());
+    repo.create(libostree::RepoMode::Archive, None)?;
+    Ok(repo)
+}
+
+fn create_test_file(treedir: &tempfile::TempDir) -> Result<(), io::Error> {
+    let mut testfile = fs::File::create(treedir.path().join("test.txt"))?;
+    write!(testfile, "test")?;
+    Ok(())
+}
+
+fn create_mtree(treedir: &tempfile::TempDir, repo: &libostree::Repo) -> Result<libostree::MutableTree, glib::Error> {
+    let gfile = gio::File::new_for_path(treedir.path());
+    let mtree = libostree::MutableTree::new();
+    repo.write_directory_to_mtree(&gfile, &mtree, None, None)?;
+    Ok(mtree)
+}
+
+fn commit_mtree(repo: &libostree::Repo, mtree: &libostree::MutableTree) -> Result<String, glib::Error> {
+    repo.prepare_transaction(None)?;
+    let repo_file = repo.write_mtree(mtree, None)?.downcast().unwrap();
+    let checksum = repo.write_commit(None, "Test Commit", None, None, &repo_file, None)?;
+    repo.transaction_set_ref(None, "test", checksum.as_str());
+    repo.commit_transaction(None)?;
+    Ok(checksum)
+}
+
+fn open_repo(repodir: &tempfile::TempDir) -> Result<libostree::Repo, glib::Error> {
+    let repo = libostree::Repo::new_for_path(repodir.path());
+    repo.open(None)?;
+    Ok(repo)
+}
+
+#[test]
+fn should_commit_content_to_repo_and_list_refs_again() {
+    let repodir = tempfile::tempdir().unwrap();
+    let treedir = tempfile::tempdir().unwrap();
+
+    let repo = create_repo(&repodir).expect("failed to create repo");
+    create_test_file(&treedir).expect("failed to create test file");
+    let mtree = create_mtree(&treedir, &repo).expect("failed to build mtree");
+    let checksum = commit_mtree(&repo, &mtree).expect("failed to commit mtree");
+
+    let repo = open_repo(&repodir).expect("failed to open repo");
+    let refs = repo.list_refs(None, None)
+        .expect("failed to list refs");
+    assert_eq!(refs.len(), 1);
+    assert_eq!(refs["test"], checksum);
+}